JS 語法(靜態)作用域(Lexical scope)
//語法作用域
function callName(){
var chicken = '小雞'
console.log(chicken);
}
callName();
//讀不到
console.log(chicken);
會發現外層讀不到內層所宣告的 chicken
是因為 JS 的作用域在函式(function)內
所以在內層宣告變數
外層當然是讀不到啦~~
作用域又分成兩種
靜態(語法)作用域
Def:
變數的作用域在語法解析時,就已經確定作用域,且不會再改變
也就是在撰寫函式時 作用域就已經確定
JS屬於 靜態作用域
動態作用域
Def:
變數的作用域在函式調用時才決定
除此之外 JS的作用域是一層一層向內
若 作用域內有用到變數
但作用域卻沒有此變數
則會向外查找
若向外查找也沒有(以下圖 會去全域找)
則會出現 ReferenceError : 變數 is not defined
//全域
// fn1作用域 獨立
function fn1(){
}
// fn2作用域 獨立
function fn2(){
}
這裡舉一個例子
var num = 1;
function fn1(){
//靜態作用域: 1
//動態作用域: 10
console.log(num);
}
function fn2(){
var num = 10;
fn1();
}
fn2();
那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷